ASN1C编译器常见问题解答

有关ASN1C许可的问题,请参阅 我们的ASN1C编译器许可常见问题。

以下是关于ASN1C编译器的一些常见问题和回答:

这个产品是用在哪些型号的ASN.1规格上的?

ASN1C ASN.1编译器已经用于涉及定制和标准化ASN.1规范的各种项目中。以下是一些标准规范:

ASN1C如何处理信息对象和参数化类型?

ASN1C编译器获取这些定义中包含的主要类型定义,并为这些类型生成精确的C/C++和/或Java编码器/解码器。有时涉及通过参数化定义和类别的层进行反向链接,以获得基本类型。编译器还能够从信息对象中提取嵌入式类型和值定义,并为它们生成代码。

ASN1C支持信息对象和参数化类型以获得更多详细信息。

ASN1C是否支持X.682中指定的限制表?

ASN1C能够解析和生成限制表的代码。它们限制了多部分信息类型,并定义了出现在信息中的某些部分和在限制表中的值。ASN1C可以生成代码来使用这些表,这些表可以在一个步骤中对这些类型的信息进行编码或解码。这是通过在为这些类型的规范生成代码时将限定表符添加到ASN1C comand行来实现的。

ASN1C生成的源代码是否可移植?

是的,生成的C和C++代码符合美国国家标准协会(ANSI)的标准。在C++版本中,避免使用不可移植的构造,如模板、I/O流操作符和异常,以确保最大程度的可移植性。运行时库的版本是可用的,其中包括源代码,而且它也是ANSI标准版,使将ASN1C代码移植到各种各样的平台成为可能。

这些代码可以在实时嵌入式系统应用程序中使用吗?

我们可以为某些嵌入式目标提供C/C++二进制库,也可以为Java提供J2ME库或为C#提供C#压缩版库。可以为没有二进制文件的平台提供源代码。这段代码可以编辑为只包含完成特定编码或解码任务所必需的内容(您可以自己完成这项工作,或者我们可以为您创建一个定制包)。这可以让您创建占用空间较小的代码,即使是在空间限制最严格的系统中。

ASN1C是否支持ASN.1标准版中指定的所有语法?

我们可以解析1990年到2015年标准版中定义的所有语法。为大多数项生成了等价的C、C++、C#或Java代码。有关目前不支持的项目信息,请参阅我们最新的发布说明。

代码是否被认为是开源的?

这取决于你对“开源”的定义。它不是GNU意义上的免费下载。但是产品的版本是可用的,包括运行时C和C++源代码,允许终端用户将他们的应用程序移植到各种各样的平台。

ASN1C是否支持旧的远程操作支持元素(ROSE)宏表示法(操作、错误等)?

ASN1C编译器有一个'1990'开关,支持这种表示法。这些关键字没有内置到标准ASN1C编译器中,因为它们不是ASN.1标准版的一部分,并且它们的使用可能会与关键字的其他使用发生冲突。这里有一篇描述ROSE宏支持的文章。

ASN1C是否支持X.694标准版,以允许从XML模式生成ASN.1来产生XML数据的有效二进制编码?

ASN1C v6.0及更高版本支持直接编译XML模式定义(XSD)文件。按照X.694标准版,对ASN.1格式进行内部翻译。ASN1C发行版中还包含一个实用程序(xsd2asn1),用于将XML schema (XSD)文件转换为等效的ASN.1。

在CAMEL应用程序部分(CAP)规范中,似乎没有为多少ASN.1类型定义生成类型/类别和编码器/解码器。它们的一般形式如下:

AccessPointName {PARAMETERS-BOUND: bound} ::= OCTET STRING
(SIZE( bound.&minAccessPointNameLength ..
bound.&maxAccessPointNameLength))
这些是参数化类型,只有在使用提供的参数完成具体实例化时才为它们生成代码。但在CAP中,这些实例化是在信息对象中完成的,从需要它们的地方删除了几个级别。为了提供在定义级别上创建类型的具体表示方法,将param命令行参数添加到ASN1C中。对于CAP,添加“-param bound=CAP-classes.cAPSpecificBoundSet”。ASN1C命令行将提供所有这些类型的具体实例。

当为许多ASN.1规范生成代码时,有些项的名称非常长。有没有办法把它们剪短?

默认情况下,ASN1C通过组合项目的所有中间嵌套名称为它生成的其他类型创建名称。在具有大量嵌套结构的规范中,这可能导致非常长的名称。在这些情况下,可以使用shortnames限定符生成更短的名称。

当我在编译样品时使用Visual Studio 2005, 为什么我得到错误信息链接:严重错误LNK1104:无法打开文件'LIBC.lib'?

此错误通常是由于试图将示例程序链接到不正确的库而导致的。ASN1C的Windows包提供的示例程序使用的库是默认情况下用Visual Studio 6.0编译的。用于Visual Studio 2005的库在c_vs2005和cpp_vs2005目录中提供。将示例复制到适当的目录应该可以解决这个问题。

如何在ASN.1规范中为模块或产品指定不同的整数类型?

be used to specify the integer type instead.-->默认情况下,无限制整数类型是32位宽的。如果规范限制了整数值的大小,ASN1C将生成尝试使用最小宽度类型的代码(例如,8位类型用于大小(1..255)限制)。如果不希望这样,则使用配置文件来指定整数类型。